Function.prototype.before = function(fn){
    var __self = this;
    return function(){
        fn.apply( this, arguments);
        return __self.apply( this, arguments);
    }
}

Function.prototype.after = function(fn){
    var __self = this;
    return function(){
        var ret = __self.apply( this, arguments);
        fn.apply( this, arguments);
        return ret;
    }
}

var func = function(){
    console.log(2);
}

func = func.before(function(){
    console.log(1)
}).after(function(){
    console.log(3);
})

func();
